package com.zty.utils.impl;

import cn.hutool.crypto.digest.DigestUtil;
import com.zty.DTO.FileMeta;
import com.zty.utils.FilenameGenerator;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * @Author ZTY
 * @Description //默认的实现类
 * @Date 23:32 2023-12-23
 **/

public class DefaultFilenameGenerator implements FilenameGenerator {
    @Override
    public String generate(FileMeta fileMeta, Object... args) {
        //  取出当前时间并进行格式化（根据小时进行区间划分）
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHH");
        String time = now.format(formatter);

        //  要将文件名拼接成2023122323+MD5(fileMeta,address)
        return "f%s%s".formatted(time,md5(fileMeta, (String) args[0]));
    }

    /**
     * 默认Object... args带过来的参数是上传文件的服务器的Ip地址
     * @param fileMeta
     * @param address
     * @return
     */
    private String md5(FileMeta fileMeta,String address){
        return DigestUtil.md5Hex(
                "%s_%s_%s_%s".formatted(
                    address,
                    fileMeta.getFilesize(),
                    fileMeta.getBucketName(),
                    fileMeta.getExtension()
                )
        );
    }

}
